package com.cailu.rabmq.sender.sender;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import com.cailu.common.bean.UserReqBean;
import com.cailu.common.constant.DirectSenderCommon;

/**
 * @author cailu
 * @filename DirectSenderTemplate
 * @description 使用AmqpTemplate 创建 发布者 消息模板
 * @date 2020/3/30 14:39
 */
@Component
public class DirectSenderTemplate {

	private Logger logger = (Logger) LoggerFactory.getLogger(this.getClass());

	@Autowired
	private AmqpTemplate template;

	/**
	 * 说明:
	 * 在Mq中【connection】以及【Channel】 【Exchange】 【Queue】 是什么样的关系
	 * 我们不管作为消息的生产者（Producer）或者消费者（Consumer）都是作为客户端（Client）连接到MQ服务器（Blocker Node）上。
	 * 在生产者和消费者与RabbitMQ-Server 之间都是通过【Connection】进行连接。
	 * 在【Connection】中存在【Channel】。消息通过连接发送到服务器上首先接收到的为交换机【Exchange】，
	 * 交换机根据消息信息以及交换机绑定的队列信息，分发到相应的消息队列【Queue】上。最后通过消费端的连接发送到消费者客户端上
	 */



	/**
	 * 功能描述  创建 发布者 自定义内容
	 * @param str 内容
	 * @return void
	 * @author cailu
	 * @date 2020/3/30 16:31
	 */
	public void sendTemplate(String str) {
		if ("".equals(str) || str == null) {
			// 第一个参数：路由键 , 第二个参数： 消息
			template.convertAndSend(DirectSenderCommon.DIRECT_DEMO, "创建 发布者 自定义内容");
		} else {
			template.convertAndSend(DirectSenderCommon.DIRECT_DEMO, str);
		}
	}

	/**
	 * 功能描述  创建 发布者
	 * @return void
	 * @author cailu
	 * @date 2020/3/30 16:31
	 */
	public void sendHelloTemplate() {
		template.convertAndSend(DirectSenderCommon.DIRECT_HELLO, "hello,rabbit~");
	}

	/**
	 * 功能描述  创建一个对象的 发布者
	 * @param
	 * @return void
	 * @author cailu
	 * @date 2020/3/31 14:35
	 */
	public void sendUserVoTemplate(UserReqBean userReq) {
		if (userReq == null) {
			UserReqBean user = new UserReqBean();
			user.setEmail("132@qq.com");
			user.setMobile("13800138000");
			user.setUserName("测试");
			template.convertAndSend(DirectSenderCommon.DIRECT_BEAN, user);
		} else {
			template.convertAndSend(DirectSenderCommon.DIRECT_BEAN, userReq);
		}

	}


}
